home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI3 / LEZIONE7f.s < prev    next >
Text File  |  1994-11-28  |  12KB  |  403 lines

  1.  
  2. ; Lezione7f.s    VISUALIZZAZIONE DI TUTTI GLI 8 SPRITE DELL'AMIGA
  3. ;        In questo listato viene verificato che gli 8 sprite hanno
  4. ;        la palette in comune a coppie, ossia lo sprite 0 ha gli stessi
  5. ;        colori dello sprite 1, lo sprite 2 ha gli stessi dello sprite 3
  6. ;        e cosi' via. Viene verificato anche che nel caso della
  7. ;        sovrapposizione di due sprite, quello con numero minore
  8. ;        prevale su quello con numero maggiore, per cui lo sprite 0
  9. ;        appare sopra tutti gli altri e lo sprite 7 puo' essere coperto
  10. ;        da tutti gli altri, mentre lo sprite 3 copre gli sprite 4,5,6,7
  11. ;        ed e' coperto dagli sprite 0,1,2
  12. ;        Premendo il tasto sinistro gli sprite si sovrappongono e si
  13. ;        notano le priorita' di sovrapposizione. Tasto destro del mouse
  14. ;        per uscire.
  15.  
  16.     SECTION    CiriCop,CODE
  17.  
  18. Inizio:
  19.     move.l    4.w,a6        ; Execbase
  20.     jsr    -$78(a6)    ; Disable
  21.     lea    GfxName(PC),a1    ; Nome lib
  22.     jsr    -$198(a6)    ; OpenLibrary
  23.     move.l    d0,GfxBase
  24.     move.l    d0,a6
  25.     move.l    $26(a6),OldCop    ; salviamo la vecchia COP
  26.  
  27. ;    Puntiamo la PIC "vuota"
  28.  
  29.     MOVE.L    #BITPLANE,d0    ; dove puntare
  30.     LEA    BPLPOINTERS,A1    ; puntatori COP
  31.     move.w    d0,6(a1)
  32.     swap    d0
  33.     move.w    d0,2(a1)
  34.  
  35. ;    Puntiamo gli sprite
  36.  
  37.     MOVE.L    #MIOSPRITE0,d0        ; indirizzo dello sprite in d0
  38.     LEA    SpritePointers,a1    ; Puntatori in copperlist
  39.     move.w    d0,6(a1)
  40.     swap    d0
  41.     move.w    d0,2(a1)
  42.     MOVE.L    #MIOSPRITE1,d0        ; indirizzo dello sprite in d0
  43.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  44.     move.w    d0,6(a1)
  45.     swap    d0
  46.     move.w    d0,2(a1)
  47.     MOVE.L    #MIOSPRITE2,d0        ; indirizzo dello sprite in d0
  48.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  49.     move.w    d0,6(a1)
  50.     swap    d0
  51.     move.w    d0,2(a1)
  52.     MOVE.L    #MIOSPRITE3,d0        ; indirizzo dello sprite in d0
  53.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  54.     move.w    d0,6(a1)
  55.     swap    d0
  56.     move.w    d0,2(a1)
  57.     MOVE.L    #MIOSPRITE4,d0        ; indirizzo dello sprite in d0
  58.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  59.     move.w    d0,6(a1)
  60.     swap    d0
  61.     move.w    d0,2(a1)
  62.     MOVE.L    #MIOSPRITE5,d0        ; indirizzo dello sprite in d0
  63.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  64.     move.w    d0,6(a1)
  65.     swap    d0
  66.     move.w    d0,2(a1)
  67.     MOVE.L    #MIOSPRITE6,d0        ; indirizzo dello sprite in d0
  68.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  69.     move.w    d0,6(a1)
  70.     swap    d0
  71.     move.w    d0,2(a1)
  72.     MOVE.L    #MIOSPRITE7,d0        ; indirizzo dello sprite in d0
  73.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  74.     move.w    d0,6(a1)
  75.     swap    d0
  76.     move.w    d0,2(a1)
  77.  
  78.     move.l    #COPPERLIST,$dff080    ; nostra COP
  79.     move.w    d0,$dff088        ; START COP
  80.     move.w    #0,$dff1fc        ; NO AGA!
  81.     move.w    #$c00,$dff106        ; NO AGA!
  82.  
  83. mouse:
  84.     btst    #6,$bfe001    ; mouse premuto?
  85.     bne.s    mouse
  86.  
  87.     MOVEQ    #$60,d0        ; Coordinata HSTART iniziale
  88.     ADDQ.B    #(10/2),d0    ; distanza col prossimo sprite
  89.                 ; (da notare che il byte HSTART lavora sui
  90.                 ; pixel a 2 a 2, per cui per spostarsi di 10
  91.                 ; pixel basta aggiungere 5 ad HSTART!
  92.     MOVE.B    d0,HSTART1
  93.     ADDQ.B    #(10/2),d0    ; distanza col prossimo sprite
  94.     MOVE.B    d0,HSTART2
  95.     ADDQ.B    #(10/2),d0    ; distanza col prossimo sprite
  96.     MOVE.B    d0,HSTART3
  97.     ADDQ.B    #(10/2),d0    ; distanza col prossimo sprite
  98.     MOVE.B    d0,HSTART4
  99.     ADDQ.B    #(10/2),d0    ; distanza col prossimo sprite
  100.     MOVE.B    d0,HSTART5
  101.     ADDQ.B    #(10/2),d0    ; distanza col prossimo sprite
  102.     MOVE.B    d0,HSTART6
  103.     ADDQ.B    #(10/2),d0    ; distanza col prossimo sprite
  104.     MOVE.B    d0,HSTART7
  105.  
  106. MouseDestro:
  107.     btst    #2,$dff016
  108.     bne.s    MouseDestro
  109.  
  110.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  111.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  112.  
  113.     move.l    4.w,a6
  114.     jsr    -$7e(a6)    ; Enable
  115.     move.l    gfxbase(PC),a1
  116.     jsr    -$19e(a6)    ; Closelibrary
  117.     rts
  118.  
  119. ;    Dati
  120.  
  121. GfxName:
  122.     dc.b    "graphics.library",0,0
  123.  
  124. GfxBase:
  125.     dc.l    0
  126.  
  127. OldCop:
  128.     dc.l    0
  129.  
  130.  
  131.     SECTION    GRAPHIC,DATA_C
  132.  
  133. COPPERLIST:
  134. SpritePointers:
  135.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  136.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  137.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  138.     dc.w    $13e,0
  139.  
  140.     dc.w    $8E,$2c81    ; DiwStrt
  141.     dc.w    $90,$2cc1    ; DiwStop
  142.     dc.w    $92,$38        ; DdfStart
  143.     dc.w    $94,$d0        ; DdfStop
  144.     dc.w    $102,0        ; BplCon1
  145.     dc.w    $104,0        ; BplCon2
  146.     dc.w    $108,0        ; Bpl1Mod
  147.     dc.w    $10a,0        ; Bpl2Mod
  148.  
  149.             ; 5432109876543210
  150.     dc.w    $100,%0001001000000000    ; bit 12 acceso!! 1 bitplane lowres
  151.  
  152. BPLPOINTERS:
  153.     dc.w $e0,0,$e2,0    ;primo     bitplane
  154.  
  155.     dc.w    $180,$000    ; color0    ; sfondo nero
  156.     dc.w    $182,$123    ; color1    ; colore 1 del bitplane, che
  157.                         ; in questo caso e' vuoto,
  158.                         ; per cui non compare.
  159.  
  160.     dc.w    $1A2,$F00    ; color17, - COLOR1 degli sprite0/1 -ROSSO
  161.     dc.w    $1A4,$0F0    ; color18, - COLOR2 degli sprite0/1 -VERDE
  162.     dc.w    $1A6,$FF0    ; color19, - COLOR3 degli sprite0/1 -GIALLO
  163.  
  164.     dc.w    $1AA,$FFF    ; color21, - COLOR1 degli sprite2/3 -BIANCO
  165.     dc.w    $1AC,$0BD    ; color22, - COLOR2 degli sprite2/3 -ACQUA
  166.     dc.w    $1AE,$D50    ; color23, - COLOR3 degli sprite2/3 -ARANCIO
  167.  
  168.     dc.w    $1B2,$00F    ; color25, - COLOR1 degli sprite4/5 -BLU
  169.     dc.w    $1B4,$F0F    ; color26, - COLOR2 degli sprite4/5 -VIOLA
  170.     dc.w    $1B6,$BBB    ; color27, - COLOR3 degli sprite4/5 -GRIGIO
  171.  
  172.     dc.w    $1BA,$8E0    ; color29, - COLOR1 degli sprite6/7 -VERDE CH.
  173.     dc.w    $1BC,$a70    ; color30, - COLOR2 degli sprite6/7 -MARRONE
  174.     dc.w    $1BE,$d00    ; color31, - COLOR3 degli sprite6/7 -ROSSO SC.
  175.  
  176.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  177.  
  178.  
  179. ; ************ Ecco gli sprite: OVVIAMENTE in CHIP RAM! ************
  180.  
  181.  ; tabella di riferimento per definire i colori:
  182.  
  183.  
  184.  ; per gli sprite 0 ed 1
  185.  ;BINARIO 00=COLORE 0 (TRASPARENTE)
  186.  ;BINARIO 10=COLORE 1 (ROSSO)
  187.  ;BINARIO 01=COLORE 2 (VERDE)
  188.  ;BINARIO 11=COLORE 3 (GIALLO)
  189.  
  190. MIOSPRITE0:        ; lunghezza 13 linee
  191. VSTART0:
  192.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  193. HSTART0:
  194.     dc.b $60    ; Pos. orizzontale (da $40 a $d8)
  195. VSTOP0:
  196.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  197.     dc.b $00
  198.  dc.w    %0000001111000000,%0111110000111110
  199.  dc.w    %0000111111110000,%1111001110001111
  200.  dc.w    %0011111111111100,%1100010001000011
  201.  dc.w    %0111111111111110,%1000010001000001
  202.  dc.w    %0111111111111110,%1000010001000001
  203.  dc.w    %0011111111111100,%1100010001000011
  204.  dc.w    %0000111111110000,%1111001110001111
  205.  dc.w    %0000001111000000,%0111110000111110
  206.  dc.w    0,0    ; fine sprite
  207.  
  208.  
  209. MIOSPRITE1:        ; lunghezza 13 linee
  210. VSTART1:
  211.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  212. HSTART1:
  213.     dc.b $60+14    ; Pos. orizzontale (da $40 a $d8)
  214. VSTOP1:
  215.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  216.     dc.b $00
  217.  dc.w    %0000001111000000,%0111110000111110
  218.  dc.w    %0000111111110000,%1111000010001111
  219.  dc.w    %0011111111111100,%1100000110000011
  220.  dc.w    %0111111111111110,%1000000010000001
  221.  dc.w    %0111111111111110,%1000000010000001
  222.  dc.w    %0011111111111100,%1100000010000011
  223.  dc.w    %0000111111110000,%1111000111001111
  224.  dc.w    %0000001111000000,%0111110000111110
  225.  dc.w    0,0    ; fine sprite
  226.  
  227.  ; per gli sprite 2 e 3
  228.  ;BINARIO 00=COLORE 0 (TRASPARENTE)
  229.  ;BINARIO 10=COLORE 1 (BIANCO)
  230.  ;BINARIO 01=COLORE 2 (ACQUA)
  231.  ;BINARIO 11=COLORE 3 (ARANCIO)
  232.  
  233. MIOSPRITE2:        ; lunghezza 13 linee
  234. VSTART2:
  235.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  236. HSTART2:
  237.     dc.b $60+(14*2)    ; Pos. orizzontale (da $40 a $d8)
  238. VSTOP2:
  239.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  240.     dc.b $00
  241.  dc.w    %0000001111000000,%0111110000111110
  242.  dc.w    %0000111111110000,%1111000111001111
  243.  dc.w    %0011111111111100,%1100001000100011
  244.  dc.w    %0111111111111110,%1000000000100001
  245.  dc.w    %0111111111111110,%1000000111000001
  246.  dc.w    %0011111111111100,%1100001000000011
  247.  dc.w    %0000111111110000,%1111001111101111
  248.  dc.w    %0000001111000000,%0111110000111110
  249.  dc.w    0,0    ; fine sprite
  250.  
  251. MIOSPRITE3:        ; lunghezza 13 linee
  252. VSTART3:
  253.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  254. HSTART3:
  255.     dc.b $60+(14*3)    ; Pos. orizzontale (da $40 a $d8)
  256. VSTOP3:
  257.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  258.     dc.b $00
  259.  dc.w    %0000001111000000,%0111110000111110
  260.  dc.w    %0000111111110000,%1111001111101111
  261.  dc.w    %0011111111111100,%1100000000100011
  262.  dc.w    %0111111111111110,%1000000111100001
  263.  dc.w    %0111111111111110,%1000000000100001
  264.  dc.w    %0011111111111100,%1100000000100011
  265.  dc.w    %0000111111110000,%1111001111101111
  266.  dc.w    %0000001111000000,%0111110000111110
  267.  dc.w    0,0    ; fine sprite
  268.  
  269.  ; per gli sprite 4 e 5
  270.  ;BINARIO 00=COLORE 0 (TRASPARENTE)
  271.  ;BINARIO 10=COLORE 1 (BLU)
  272.  ;BINARIO 01=COLORE 2 (VIOLA)
  273.  ;BINARIO 11=COLORE 3 (GRIGIO)
  274.  
  275. MIOSPRITE4:        ; lunghezza 13 linee
  276. VSTART4:
  277.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  278. HSTART4:
  279.     dc.b $60+(14*4)    ; Pos. orizzontale (da $40 a $d8)
  280. VSTOP4:
  281.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  282.     dc.b $00
  283.  dc.w    %0000001111000000,%0111110000111110
  284.  dc.w    %0000111111110000,%1111001001001111
  285.  dc.w    %0011111111111100,%1100001001000011
  286.  dc.w    %0111111111111110,%1000001111000001
  287.  dc.w    %0111111111111110,%1000000001000001
  288.  dc.w    %0011111111111100,%1100000001000011
  289.  dc.w    %0000111111110000,%1111000001001111
  290.  dc.w    %0000001111000000,%0111110000111110
  291.  dc.w    0,0    ; fine sprite
  292.  
  293. MIOSPRITE5:        ; lunghezza 13 linee
  294. VSTART5:
  295.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  296. HSTART5:
  297.     dc.b $60+(14*5)    ; Pos. orizzontale (da $40 a $d8)
  298. VSTOP5:
  299.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  300.     dc.b $00
  301.  dc.w    %0000001111000000,%0111110000111110
  302.  dc.w    %0000111111110000,%1111001111001111
  303.  dc.w    %0011111111111100,%1100001000000011
  304.  dc.w    %0111111111111110,%1000001111000001
  305.  dc.w    %0111111111111110,%1000000001000001
  306.  dc.w    %0011111111111100,%1100000001000011
  307.  dc.w    %0000111111110000,%1111001111001111
  308.  dc.w    %0000001111000000,%0111110000111110
  309.  dc.w    0,0    ; fine sprite
  310.  
  311.  ; per gli sprite 6 e 7
  312.  ;BINARIO 00=COLORE 0 (TRASPARENTE)
  313.  ;BINARIO 10=COLORE 1 (VERDE CHIARO)
  314.  ;BINARIO 01=COLORE 2 (MARRONE)
  315.  ;BINARIO 11=COLORE 3 (ROSSO SCURO)
  316.  
  317. MIOSPRITE6:        ; lunghezza 13 linee
  318. VSTART6:
  319.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  320. HSTART6:
  321.     dc.b $60+(14*6)    ; Pos. orizzontale (da $40 a $d8)
  322. VSTOP6:
  323.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  324.     dc.b $00
  325.  dc.w    %0000001111000000,%0111110000111110
  326.  dc.w    %0000111111110000,%1111001111001111
  327.  dc.w    %0011111111111100,%1100001000000011
  328.  dc.w    %0111111111111110,%1000001111000001
  329.  dc.w    %0111111111111110,%1000001001000001
  330.  dc.w    %0011111111111100,%1100001001000011
  331.  dc.w    %0000111111110000,%1111001111001111
  332.  dc.w    %0000001111000000,%0111110000111110
  333.  dc.w    0,0    ; fine sprite
  334.  
  335. MIOSPRITE7:        ; lunghezza 13 linee
  336. VSTART7:
  337.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  338. HSTART7:
  339.     dc.b $60+(14*7)    ; Pos. orizzontale (da $40 a $d8)
  340. VSTOP7:
  341.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  342.     dc.b $00
  343.  dc.w    %0000001111000000,%0111110000111110
  344.  dc.w    %0000111111110000,%1111001111001111
  345.  dc.w    %0011111111111100,%1100000001000011
  346.  dc.w    %0111111111111110,%1000000001000001
  347.  dc.w    %0111111111111110,%1000000001000001
  348.  dc.w    %0011111111111100,%1100000001000011
  349.  dc.w    %0000111111110000,%1111000001001111
  350.  dc.w    %0000001111000000,%0111110000111110
  351.  dc.w    0,0    ; fine sprite
  352.  
  353.     SECTION    PLANEVUOTO,BSS_C    ; Il bitplane azzerato che usiamo,
  354.                     ; perche' per vedere gli sprite
  355.                     ; e' necessario che ci siano bitplanes
  356.                     ; abilitati
  357. BITPLANE:
  358.     ds.b    40*256        ; bitplane azzerato lowres
  359.  
  360.     end
  361.  
  362. In questo listato vengono "puntati" tutti gli 8 sprites, i quali hanno il
  363. numero nel disegno per rendere piu' chiara la loro disposizione.
  364. Come spiegato nella teoria, gli 8 sprite hanno 4 palette distinte di colori,
  365. per cui gli sprite adiacenti condivisono la stessa palette:
  366.  
  367.     dc.w    $1A2,$F00    ; color17, - COLOR1 degli sprite0/1 -ROSSO
  368.     dc.w    $1A4,$0F0    ; color18, - COLOR2 degli sprite0/1 -VERDE
  369.     dc.w    $1A6,$FF0    ; color19, - COLOR3 degli sprite0/1 -GIALLO
  370.  
  371.     dc.w    $1AA,$FFF    ; color21, - COLOR1 degli sprite2/3 -BIANCO
  372.     dc.w    $1AC,$0BD    ; color22, - COLOR2 degli sprite2/3 -ACQUA
  373.     dc.w    $1AE,$D50    ; color23, - COLOR3 degli sprite2/3 -ARANCIO
  374.  
  375.     dc.w    $1B2,$00F    ; color25, - COLOR1 degli sprite4/5 -BLU
  376.     dc.w    $1B4,$F0F    ; color26, - COLOR2 degli sprite4/5 -VIOLA
  377.     dc.w    $1B6,$BBB    ; color27, - COLOR3 degli sprite4/5 -GRIGIO
  378.  
  379.     dc.w    $1BA,$8E0    ; color29, - COLOR1 degli sprite6/7 -VERDE CH.
  380.     dc.w    $1BC,$a70    ; color30, - COLOR2 degli sprite6/7 -MARRONE
  381.     dc.w    $1BE,$d00    ; color31, - COLOR3 degli sprite6/7 -ROSSO SC.
  382.  
  383. Da notare che i colori Color16,Color20,Color24 e Color28 non sono usati dagli
  384. sprite, vengono saltati, in quanto corrisponderebbero al color0 dello sprite,
  385. quello TRASPARENTE, che non e', appunto, un colore, ma un "BUCO" che assume
  386. il colore dei bitplane (o sprites) sottostanti.
  387. Ogni sprite ha il suo VSTART,HSTART e VSTOP, vediamo ad esempio lo SPRITE2:
  388.  
  389. MIOSPRITE2:        ; lunghezza 13 linee
  390. VSTART2:
  391.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  392. HSTART2:
  393.     dc.b $60+(14*2)    ; Pos. orizzontale (da $40 a $d8)
  394. VSTOP2:
  395.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  396.     dc.b $00
  397.  
  398. Ogni sprite all'inizio e' distanziato dagli altri, tramite l'aggiunta di (14*x)
  399. agli HSTART. Dopo la pressione del tasto sinistro del mouse vengono cambiati
  400. tutti gli HSTART meno il primo in modo da sovrapporre gli sprite e mostrare le
  401. priorita' di visualizzazione tra di essi.
  402.  
  403.